There are a number of different types of computing languages, language systems, and environments. For example, a technical computing environment may be used to design and test models of systems, such as block diagram models of systems. A technical computing environment may include textual languages which may be array-oriented, object-oriented, or support a combination of programming paradigms.
In modern computing language systems, it may be possible for applications to be built from code in multiple languages including multiple technical computing languages and multiple general-purpose languages.
In some situations, a user may wish to interface a first computing language, such as a specialized computing language, to a second language, such as the general purpose programming languages C#, Java, C++, C, .NET, etc. For example, a user may wish to invoke methods provided by a general purpose programming language from within a technical computing environment or technical computing language, in order to leverage the capabilities or methods of the general purpose language.
However, as a result of the differences between language systems, it may be difficult to interface some computing language systems to other language systems. For example, because some technical computing languages may not distinguish between scalars, vectors and matrices, it may be difficult to invoke methods that have the same name and are only distinguishable by the data types of their input and/or output parameters. In addition, it may be difficult to translate data from a format compatible with a first language system that represents data primarily as arrays (an “array-based language”) to a format compatible with a different language system that does not natively represent data primarily as arrays.
Furthermore, language systems may support type polymorphism and/or operator overloading. As a result, multiple invocable methods having the same name may be defined in each language system. Each method may be called using the same name, but a different method will be called based on the number and type of inputs and/or outputs provided by each method. If the language is dynamically typed (i.e., type checking is performed at run-time), the particular version of the method that is called may not be known until the method is invoked using specific inputs. Thus, if a user invokes a method in a first language system, it may not be clear which method in a second language system corresponds to the invoked first language system method.